Generally speaking, in a computer system the operating system allocates memory in response to various driver or system (kernel code) and application (user code) requests. Depending on the operating system, memory allocation may be limited to mapped (vs. unmapped) pages of physical memory. For example, a UNIX system allows unmapped pages to be allocated from kernel code. On the other hand, the Windows NT system provides no interface to allocate unmapped physical pages and requires allocated pages to be mapped into a virtual address space.
Therefore, the size of memory being allocated is limited by the size of the virtual memory address space of the operating system. That is, in an operating system that employs n-bit virtual memory addressing, the largest virtual memory space allowed/enabled is 2.sup.n bytes of virtual memory. For example, in Windows NT memory allocation is limited by the 32-bit (4GB) virtual space of each process. Kernel mode code (drivers, etc.) is limited to the upper 2GB of this space while user mode code is limited to the lower 2GB of this space.
Due to these limitations, many operating systems are unable to allow users/programs to take advantage of very large physical memory areas, such as those that exist on computer database servers. "Very large" in this context is relative to the virtual address space, and signifies, for example, memory areas greater than the "normally" allocated virtual memory areas of an operating system. Operating systems are not normally able to provide access to a physical memory larger than the virtual address space.
One solution includes reserving memory at boot time to be used as a physical cache of pages for specific applications. The disadvantages of reserving (preallocating) memory at boot time include: (i) the memory size is predefined and hard coded at boot time, and therefore not modifiable after boot time; (ii) such memory requires special operating system calls (I/O calls); and (iii) specialized drivers are needed to address the memory since allocation is not through the operating system and therefore does not use operating system addressing.
Thus, there is a need for improvement in the art with respect to large memory allocation in computer systems.